/**
 * MAP.ui.Core(Env) TODO use cookie
 * 
 * @author zhouxw
 */
var MAP_C_SERVICE = (function getServerUrl() {
	var location_pathname = document.location.pathname;
	while (location_pathname.indexOf('/') == 0)
		location_pathname = location_pathname.substr(1);
	var baseurl = unescape(location_pathname.substr(0));
	var service = baseurl.substring(0, baseurl.indexOf('/'));
	return service;
})();
var MAP_C_SERVER_URL = (function getServerUrl() {
	var contextName = document.location.protocol + '//' + document.location.host + '/' + MAP_C_SERVICE;
	return contextName;
})();
MAP_Util.setCookie('MAP_C_SERVER_URL', MAP_C_SERVER_URL);
// MAP_C_DEFAULT_BILLKEY = ''; // only single
// MAP_C_DEFAULT_DSN = 'CMCC'; // only single
// MAP_C_DEFAULT_CORPID = 999; // only single
// MAP_C_DEFAULT_USERID = 1; // only single
// MAP_C_DEFAULT_USERCODE = 'Administrator'; // only single
// MAP_C_DEFAULT_ROLECODE = 'ADMIN'; // only single
// //
var MAP_C_ENV = {
	clientID : '', // 用于建立客户端和中间层的联系
	sessionID : 0, // 数据库表s_login中的sessionID字段,0表示未登录
	DSN : '', // DSN名称
	SID : '||0', // 原先设计中的SID,保留这个属性,为了和Portal兼容
	DEBUG : '', // 运行方式
	cacheViewID : 0,
	// sessionID=clientID+'|'+DSN+'|'+LOGINID
	// viewID=cacheViewID+'$'+clientID
	createViewID : function() {
		// return (this.cacheViewID++) + " " + this.clientID;
		return new UUID().toString();//.underscore();
	},
	createContextID : function() {
		return new UUID().toString();//.underscore();
	},
	createClientID : function() {
		return new UUID().toString();//.underscore();
	},
	// public 登录后重设clientID
	newClientID : function() {
		this.clientID = this.createClientID();
		this.SID = this.clientID + '|' + this.DSN + '|' + this.sessionID;

		MAP_Util.setCookie('MAP_DOM_SID', this.SID);
	},
	// private: 构造空Session
	initSession : function() {
		// this.clientID = this.createClientID(); // 先不创建,否则中间层和客户端不一致
		if (Ext.isEmpty(this.clientID) || 'NVL' == this.clientID || '0' == this.clientID) {
			this.clientID = this.createClientID();
		}
		this.DSN = '';
		this.sessionID = 0;
		this.SID = this.clientID + '|' + this.DSN + '|' + this.sessionID;

		MAP_Util.setCookie('MAP_DOM_SID', this.SID);
	},
	// private: 检查中间层SID
	checkSession : function(SID) {
		if (SID) {
			var a = SID.split('|');
			if (a.length>=3) {
				if (!Ext.isEmpty(a[0]))
					this.clientID = a[0];
//				if (!Ext.isEmpty(a[1]))
//					this.DSN = a[1];
			}
			if (a.length<3 || Ext.isEmpty(a[2]) || parseInt(a[2]) <= 0) { // 未登录不检查
				MAP_C_ENV.initSession();
				return;
			}
		} else {
			MAP_C_ENV.initSession();
			return;
		}
		try {
			var _xml = MAP_Request.getRfcXml('WebCheckSession', SID);
			MAP_Request.ajaxRfcTxt(_xml, function(_jsonObj) { // 冗余检查 中间层已经检查过了
				if (_jsonObj == 'false') {
					MAP_C_ENV.initSession();
				} else {
					MAP_C_ENV.setValue(SID);
				}
			});
		} catch (E) {
			MAP_C_ENV.initSession();
		}
	},
	// public: 第二步初始化并检查SID
	init : function() {
		if (this.sessionID <= 0) { // 未登录
			var COOKIE_SID = MAP_Util.getCookie('MAP_DOM_SID');
			if (!Ext.isEmpty(COOKIE_SID)) {
				this.checkSession(COOKIE_SID);
			} else {
				this.initSession();
			}
		} else {
			this.checkSession(this.SID);
		}
	},
	// public: 第一步JSP设置SID
	setValue : function(SID) {
		if (arguments.length==0) {
			this.SID = MAP_Util.$G('SID');
			if (Ext.isEmpty(this.SID))
				this.SID = MAP_Util.getCookie('MAP_DOM_SID');
		} else {
			this.SID = SID;
		}
		if (Ext.isEmpty(this.SID)) {
			MAP_Util.delCookie('MAP_DOM_SID');
			return;
		}
		var a = this.SID.split('|');
		this.clientID = a[0];
		this.DSN = a[1];
		this.sessionID = a[2];

		MAP_Util.setCookie('MAP_DOM_SID', this.SID);
	}
};
// self or iframe
var MAP_C_MODE = 'self';
// @deprecated context cache
var MAP_C_CONTEXTS = [];
// uioptModel工具栏中将禁用的操作设为隐藏
// 根据项目需求可以手动更改（true隐藏，false显示）
var MAP_C_ISTOOLHIDDEN = true;
// //
// env // only single
// var MAP_DSN = (function() {
// var dsn = '';
// // new Ajax.Request(MAP_C_SERVER_URL + '/getDSN', {
// // // method : 'get',
// // encoding : 'UTF-8',
// // asynchronous : false,
// // onFailure : function(_err) {
// // throw {
// // message : 'Ajax Failure:' + _err
// // };
// // },
// // onSuccess : function(_res) {
// // dsn = _res.responseText;
// // }
// // });
// return dsn;
// })();
// //
